library(tidyverse)
library(here) #gérer les chemins de fichiers et de répertoires
library(plotly) # créer des graphiques interactifs
# Définition du chemin d'acces

path1=here("TP 3 - Logiciel statistique R/Donnees", "annual-growth-in-gni-per-capita.csv")
path2=here("TP 3 - Logiciel statistique R/Donnees", "population-growth-annual.csv")
path3=here("TP 3 - Logiciel statistique R/Donnees", "gender-inequality-index.csv")

# importation de la base sous format csv

agpc <-read.csv(path1)
pga<-read.csv(path2)
gii <-read.csv(path3)
niger_agpc=agpc |> 
  #extraire la base qui contient les données sur le niger
  filter(`Region.Name` %in% c("Niger")) |> 
  #selectionner seulement les variables intéressantes
  dplyr::select(`Region.Name`, `End.Year`, `Value`)|> 
  #renommage des variables
   rename(Annee=`End.Year`, Region=`Region.Name`) 

## Afrique de l'ouest

#Bénin, Burkina Faso, Côte d'Ivoire, Cap-Vert, Gambie, Ghana, Guinée, 
#Guinée-Bissau, Libéria, Mali, Mauritanie, Niger, Nigeria, Sénégal, 
#Sierra Leone et Togo.

western_afri_agpc=agpc |> 
  #extraire la base qui contient les données sur les pays de l'Afrique de l'ouest 
  filter(`Region.Name` %in% c( "Benin","Burkina Faso","Côte d’Ivoire" 
                               ,"Cabo Verde" ,"Gambia","Ghana","Guinea",
                               "Guinea-Bissau","Liberia","Mali","Mauritania",
                               "Nigeria","Niger","Senegal","Sierra Leone",
                               "Togo")) |> 
  #selectionner seulement les variables intéressantes
  dplyr::select(`Region.Name`, `End.Year`, `Value`)|> 
  #convertir la variable value en numérique
  mutate(Value = as.numeric(Value)) |> 
  #renommage des variables
  rename(Annee=`End.Year`, Region=`Region.Name`) |> 
  #aggregation des données par année
  group_by(`Annee`) |> 
  #calcul de la moyenne par année
  summarise(Value = mean(Value))

#créer une nouvelle variable region pour constituer la base Afrique de l'ouest
#repeter "Western Africa" autant de fois qu'il y de ligne
western_afri_agpc$`Region`<- rep("Western Africa", nrow(western_afri_agpc)) 

western_afri_agpc_ord<-western_afri_agpc|> 
  #reordonner les variables
  dplyr::select(`Region`, `Annee`, `Value`)



## Monde

rew_agpc <- agpc |> 
  #convertir la variable value en numérique
  mutate(Value= as.numeric(Value)) |> 
  #selectionner seulement les variables intéressantes
  dplyr::select(`Region.Name`, `End.Year`, `Value`)|> 
  #renommage des variables
  rename(Annee=`End.Year`, Region=`Region.Name`) |> 
  #aggregation des données par année
  group_by(`Annee`) |> 
  #calcul de la moyenne par année
  summarise(Value = mean(Value))

#création d'une nouvelle variable region pour constituer la base monde
rew_agpc$`Region`<- rep("World", nrow(rew_agpc) )

rew_agpc_ord<-rew_agpc |> 
  #ordonner les variables
  dplyr::select(`Region`, `Annee`, `Value`)

## Base finale
#fusionner les données par ligne (superposition)
agpc_ni_wa_DB<- rbind(niger_agpc,western_afri_agpc, rew_agpc_ord )
pal=c("#7209b7", "#ffb703","#219ebc")
agpc_ni_wa_DB |> 
  #Convertir Value en numérique
  mutate(Value = as.numeric(Value)) |> 
  ggplot(aes(Annee, Value,  color = Region )) +
#show.legend=NULL signifie que cette couche ne sera pas incluse dans la légende
  geom_line(size = 1, show.legend=NULL)+
    geom_point(size = 1.5)+
        theme_minimal()+
          scale_y_continuous(limits = c(-30, 10)) + # Limites de l'axe y

          #contrôle de l'échelle de l'axe des x;  
          #breaks= emplacement des marques et 
          #labels= étiquettes associées aux marques
          scale_x_continuous(breaks=c(1970,1980,1990,2000,2010,2020),
                             labels = c("1970","1980","1990","2000",
                                        "2010","2020"))+ 
         #définir les couleurs des courbes suivant la palette de couleur définie
          scale_color_manual(values = pal)+ 
          
          #Définir le titre du graphique en italique
          ggtitle(expression(italic("Figure : Income growth and distribution (Gini Index)"))) +
          # supprimer les étiquettes des axes et définir la source
          labs(colour = "", 
                x="", 
                y="",
                caption = "Source: World Bank")+
              
               theme(
                plot.title = element_text(color = "blue", 
                                          face = "italic", 
                                          size=11, vjust = 8, hjust = -0.17),
                plot.caption = element_text(face = "italic",  hjust = -0.095),
                 #lignes (pleines) principales verticales 
                panel.grid.major.x = element_line(colour = "grey",
                                                  size = 0.1, 
                                                  linetype = "solid"),
                # Supprime les lignes de grille secondaires
                panel.grid.minor.x = element_blank(), 
                #lignes (pointillées) principale horizontales 
                panel.grid.major.y = element_line(colour = "grey", 
                                                  size = 0.1, 
                                                  linetype = "dashed"), 
                # Supprime les lignes de grille secondaires
                panel.grid.minor.y = element_blank(),
               legend.position = c(0.12, 1.05), # position de la legende
               legend.direction="horizontal",# direction de la legende
               #définir les marges du cadran du graphique
               plot.margin = margin(1, 1, 1, 1, "cm") 
              )+
              #Ajuster la taille des points dans la légende
              guides(color = guide_legend(override.aes = list(size = 3)))  

## Niger
niger_pga=pga |> 
  #extraire la base qui contient les données sur le niger
  filter(`Region.Name` %in% c("Niger")) |> 
  #selectionner seulement les variables intéressantes
  dplyr::select(`Region.Name`, `End.Year`, `Value`)|> 
  #renommage des variables
   rename(Annee=`End.Year`, Region=`Region.Name`) 

## Afrique de l'ouest

#Bénin, Burkina Faso, Côte d'Ivoire, Cap-Vert, Gambie, Ghana, Guinée, 
#Guinée-Bissau, Libéria, Mali, Mauritanie, Niger, Nigeria, Sénégal, 
#Sierra Leone et Togo.

western_afri_pga=pga  |> 
  #extrair la base qui contient les données sur les pays de l'Afrique de l'ouest 
  filter(`Region.Name` %in% c( "Benin","Burkina Faso","Côte d’Ivoire" ,
                               "Cabo Verde" ,"Gambia","Ghana","Guinea",
                               "Guinea-Bissau","Liberia","Mali","Mauritania",
                               "Nigeria","Niger","Senegal","Sierra Leone",
                               "Togo")) |> 
  #selectionner seulement les variables intéressantes
  dplyr::select(`Region.Name`, `End.Year`, `Value`)|> 
  #convertir la variable value en numérique
  mutate(Value = as.numeric(Value)) |> 
  #renommage des variables
  rename(Annee=`End.Year`, Region=`Region.Name`) |> 
  #aggregation des données par année
  group_by(`Annee`) |> 
  #calcul de la moyenne par année
  summarise(Value = mean(Value))

#créer d'une nouvelle variable region pour constituer la base Afriqye de l'ouest
#repeter "Western Africa" autant de fois qu'il y de ligne
western_afri_pga$`Region`<- rep("Western Africa", nrow(western_afri_pga)) 

western_afri_pga_ord<-western_afri_pga|> 
  #reordonner les variables
  dplyr::select(`Region`, `Annee`, `Value`)



## Monde
re_w  <- pga |> 
  #convertir la variable value en numérique
  mutate(Value= as.numeric(Value)) |> 
  #selectionner seulement les variables intéressantes
  dplyr::select(`Region.Name`, `End.Year`, `Value`)|> 
  #renommage des variables
  rename(Annee=`End.Year`, Region=`Region.Name`) |> 
  #aggregation des données par année
  group_by(`Annee`) |> 
  #calcul de la moyenne par année
  summarise(Value = mean(Value))

#création d'une nouvelle variable region pour constituer la base monde
re_w$`Region`<- rep("World", nrow(re_w) )

re_w_ord<-re_w |> 
  #ordonner les variables
  dplyr::select(`Region`, `Annee`, `Value`)


## Base finale
#fusionner les données par ligne (superposition)
pga_ni_wa_w_DB<- rbind(niger_pga, re_w_ord,western_afri_pga_ord)
pal2=c("#4682B4","#E7B800", "#FC4E07")

pga_ni_wa_w_DB |> 
  #Convertir Value en numérique
  mutate(Value = as.numeric(Value)) |> 
  ggplot(aes(Annee, Value,  color = Region )) +
  #show.legend=NULL signifie que cette couche ne sera pas incluse dans la légende
  geom_line(size = 1, show.legend=NULL)+
    geom_point(size = 1.5)+
        theme_minimal()+
          scale_y_continuous(limits = c(0.2, 3.91)) +# Limites de l'axe y
          #contrôle de l'échelle de l'axe des x;  
          #breaks= emplacement des marques et 
          #labels= étiquettes associées aux marques
          scale_x_continuous(breaks=c(1960,1970,1980,1990,2000,2010,2020),
                             labels = c("1960","1970","1980","1990","2000",
                                        "2010","2020"))+ #
          scale_color_manual(values = pal2)+ #définir les couleurs des courbes
  
           # Définir le titre du graphique en italique
          ggtitle(expression(italic("Figure: Annual population growth (%)"))) +
          # supprimer les étiquettes des axes et définir la source
          labs(colour = "",
               x="", 
               y="",
               caption = "Source: World Bank")+
           theme(
            plot.title = element_text(color = "blue", face = "italic", 
                                      size=11, vjust = 8, hjust = -0.12),
            plot.caption = element_text(face = "italic", hjust = -0.095),
            #lignes (pleines) principales verticales 
            panel.grid.major.x = element_line(colour = "grey",
                                              size = 0.1, linetype = "solid"),
            panel.grid.minor.x = element_blank(),
            # lignes (pointillées) principale horizontales
            panel.grid.major.y = element_line(colour = "grey", 
                                              size = 0.1, linetype = "dashed"), 
            # Supprime les lignes de grille secondaires
            panel.grid.minor.y = element_blank(), 
            legend.position = c(0.12, 1.05), # position de la legende
            legend.direction="horizontal",# direction de la legende
            # définir les marges du cadran du graphique
            plot.margin = margin(1, 1, 1, 1, "cm")) +
            # Taille des points dans la légende
            guides(color = guide_legend(override.aes = list(size = 3)))  

## Niger
niger_gii=gii  |> 
  #extraire la base qui contient les données sur le niger
  filter(`Region.Name` %in% c("Niger")) |> 
  #selectionner seulement les variables intéressantes
  dplyr::select(`Region.Name`, `End.Year`, `Value`)|> 
  #renommage des variables
   rename(Annee=`End.Year`, Region=`Region.Name`) 

## Afrique de l'ouest

#Bénin, Burkina Faso, Côte d'Ivoire, Cap-Vert, Gambie, Ghana, Guinée, 
#Guinée-Bissau, Libéria, Mali, Mauritanie, Niger, Nigeria, Sénégal, 
#Sierra Leone et Togo.

western_afri_gii=gii  |> 
  #extrair la base qui contient les données sur les pays de l'Afrique de l'ouest 
  filter(`Region.Name` %in% c( "Benin","Burkina Faso","Côte d’Ivoire" ,
                               "Cabo Verde" ,"Gambia","Ghana","Guinea",
                               "Guinea-Bissau","Liberia","Mali","Mauritania",
                               "Nigeria","Niger","Senegal","Sierra Leone",
                               "Togo")) |> 
  #selectionner seulement les variables intéressantes
  dplyr::select(`Region.Name`, `End.Year`, `Value`)|> 
  #convertir la variable value en numérique
  mutate(Value = as.numeric(Value)) |> 
  #renommage des variables
  rename(Annee=`End.Year`, Region=`Region.Name`) |> 
  #aggregation des données par année
  group_by(`Annee`) |> 
  #calcul de la moyenne par année
  summarise(Value = mean(Value))

#créer d'une nouvelle variable region pour constituer la base Afriqye de l'ouest
#repeter "Western Africa" autant de fois qu'il y de ligne
western_afri_gii$`Region`<- rep("Western Africa", nrow(western_afri_gii)) 

western_afri_gii_ord<-western_afri_gii|> 
  #reordonner les variables
  dplyr::select(`Region`, `Annee`, `Value`)


## Monde

re_w_gii <- gii |> 
  #convertir la variable value en numérique
  mutate(Value= as.numeric(Value)) |> 
  #selectionner seulement les variables intéressantes
  dplyr::select(`Region.Name`, `End.Year`, `Value`)|> 
  #renommage des variables
  rename(Annee=`End.Year`, Region=`Region.Name`) |> 
  #aggregation des données par année
  group_by(`Annee`) |> 
  #calcul de la moyenne par année
  summarise(Value = mean(Value))

#création d'une nouvelle variable region pour constituer la base monde
re_w_gii$`Region`<- rep("World", nrow(re_w_gii) )

re_w_gii_ord<-re_w_gii |> 
  #ordonner les variables
  dplyr::select(`Region`, `Annee`, `Value`)

## Base finale

gii_ni_wa_w_DB<- rbind(niger_gii, re_w_gii_ord,western_afri_gii_ord)
# Graphique interactive

pal3=c("#7209b7", "#f77f00", "#2d00f7")

P=gii_ni_wa_w_DB |> 
  #Convertir Value en numérique
  mutate(Value = as.numeric(Value)) |> 
  ggplot(aes(Annee, Value, fill=Region , color = Region)) +
    geom_point(size = 1, aes(text=paste(Region,":", round(Value,1))))+
    geom_line(size = 0.75)+
    scale_fill_hue(direction=1)+
        theme_minimal()+
          scale_y_continuous(limits = c(0.1, 0.8)) + # Limites de l'axe y
  
         #contrôle de l'échelle de l'axe des x;  
         #breaks= emplacement des marques et labels= étiquettes associées aux marques.
          scale_x_continuous(breaks=c(1990,1995,2000,2005,2010,2015,2020),
                             labels = c("1990","1995","2000","2005","2010","2015","2020"))+ 
          scale_color_manual(values = pal3)+ # définir les couleurs des courbes
          scale_fill_manual(values = pal3)+
         
          ggtitle("Figure : Gender inequality index") +
        # supprimer les étiquettes des axes et de la légende
          labs(color = NULL,
               x="", 
               y="",
               fill="" )+
           theme(
             # mise en forme du titre du graphique
             plot.title = element_text(color = "blue", 
                                       face = "italic", size =11),
             # définir les marges du cadran du graphique
             plot.margin = margin(1, 1, 1, 1, "cm"))+
             # Taille des points dans la légende
             guides(color = guide_legend(override.aes = list(size = 3)))  


# Convertir le graphique ggplot P en une version interactive avec ggplotly
ggplotly(P, tooltip="text") |> 
  plotly::layout(title = list(
  # Définir le titre du graphique avec une police bleue, italique et une taille
                font = list(color = "blue", face = "italic", size = 12)),
    
                legend=list(title = NULL, # Supprimer le titre de la légende
                    # Positionner la légende à l'extrémité gauche du graphique
                             x = 0,   
                    # Positionner la légende en haut du graphique
                             y = 1.1,  
                    # Définir l'orientation horizontale de la légende
                             orientation = 'h' ), 
                    # définition de la source
                annotations = list(
                  x = 0.1,  # Position x de la source
                  y = -0.15,  # Position y de la source
                  text = "Source : UNDP",  # Texte de la source
                  showarrow = F,  # Supprime la flèche de la source
                  xref = 'paper',  # Référence de la position x 
                  yref = 'paper',  # Référence de la position y 
                  xanchor = 'right',  # Positionner la source  à droite sur X
                  yanchor = 'auto',  # Positionner la source  à droite sur Y
                  # Personnaliser la police de la source
                  font = list(size = 11, color = "black"))
                 )